#!/usr/bin/env python3
"""
演示数据生成脚本
生成PNG和GIF格式的示例图片
"""

import os
import sys
import logging
from pathlib import Path

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def generate_demo_images():
    """生成演示图片"""
    try:
        # 导入工具
        from tools.map_rendering import ImageRenderingTools
        from config import MAP_CONFIG
        
        # 创建渲染工具实例
        renderer = ImageRenderingTools()
        
        # 确保输出目录存在
        output_dir = Path(MAP_CONFIG['output_dir'])
        output_dir.mkdir(parents=True, exist_ok=True)
        
        generated_files = []
        
        # 1. 生成柱状图示例
        logger.info("📊 生成柱状图示例...")
        bar_chart_path = renderer.create_matplotlib_chart(
            chart_type='bar',
            title='演示柱状图 - 销售数据',
            save_path=str(output_dir / 'demo_bar_chart.png')
        )
        generated_files.append(bar_chart_path)
        
        # 2. 生成散点图示例
        logger.info("📈 生成散点图示例...")
        scatter_chart_path = renderer.create_matplotlib_chart(
            chart_type='scatter',
            title='演示散点图 - 相关性分析',
            save_path=str(output_dir / 'demo_scatter_chart.png')
        )
        generated_files.append(scatter_chart_path)
        
        # 3. 生成地理数据图示例
        logger.info("🌍 生成地理数据图示例...")
        geo_chart_path = renderer.create_geo_chart(
            title='演示地理数据图 - 北京区域分布',
            save_path=str(output_dir / 'demo_geo_chart.png')
        )
        generated_files.append(geo_chart_path)
        
        # 4. 生成热力图示例
        logger.info("🔥 生成热力图示例...")
        heatmap_path = renderer.create_heatmap(
            title='演示热力图 - 数据关联',
            save_path=str(output_dir / 'demo_heatmap.png')
        )
        generated_files.append(heatmap_path)
        
        # 5. 生成组合图表示例
        logger.info("📊 生成组合图表示例...")
        multi_chart_path = renderer.create_multi_chart(
            charts_config=[
                {'type': 'bar', 'title': '销售统计'},
                {'type': 'line', 'title': '趋势分析'},
                {'type': 'scatter', 'title': '相关性'},
                {'type': 'pie', 'title': '占比分布'}
            ],
            title='演示组合图表',
            save_path=str(output_dir / 'demo_multi_chart.png')
        )
        generated_files.append(multi_chart_path)
        
        # 6. 生成动画GIF示例
        logger.info("🎬 生成动画GIF示例...")
        animation_path = renderer.create_animation_gif(
            title_list=[f"演示动画 - 第{i+1}帧" for i in range(8)],
            duration=0.8,
            save_path=str(output_dir / 'demo_animation.gif')
        )
        generated_files.append(animation_path)
        
        # 输出生成结果
        logger.info("✅ 演示图片生成完成！")
        logger.info(f"📁 输出目录: {output_dir}")
        logger.info(f"🎨 生成文件数量: {len(generated_files)}")
        
        for i, file_path in enumerate(generated_files, 1):
            file_name = Path(file_path).name
            file_size = os.path.getsize(file_path) / 1024  # KB
            logger.info(f"  {i}. {file_name} ({file_size:.1f} KB)")
        
        return generated_files
        
    except Exception as e:
        logger.error(f"❌ 生成演示图片失败: {e}")
        raise

def main():
    """主函数"""
    logger.info("🎨 开始生成演示图片...")
    
    try:
        # 检查依赖
        try:
            import matplotlib
            import numpy
            import PIL
            import imageio
            logger.info("✅ 依赖检查通过")
        except ImportError as e:
            logger.error(f"❌ 缺少依赖: {e}")
            logger.error("请运行: pip install matplotlib numpy pillow imageio")
            sys.exit(1)
        
        # 生成演示图片
        generated_files = generate_demo_images()
        
        logger.info("🎉 演示图片生成任务完成！")
        logger.info("💡 提示: 您可以在Web应用中查看这些演示图片")
        
        return 0
        
    except Exception as e:
        logger.error(f"❌ 执行失败: {e}")
        return 1

if __name__ == "__main__":
    exit_code = main()
    sys.exit(exit_code) 